﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Entidad;
using System.Data.SqlClient;

namespace DataAccess
{
    public class CategoriaData
    {
        private String literalConexion;

        public CategoriaData(String literalConexion)
        {
            this.literalConexion = literalConexion;
        }

        public LinkedList<Categoria> GetCategorias() { // Metodo que obtiene todas las categorias en forma de lista enlazada

            String consulta = "select * from Categoria"; // consulta a la base de datos

            SqlConnection conexion = new SqlConnection(literalConexion); // inicializa la conexion
            
            conexion.Open();// abre la conexion 
            
            SqlCommand cmdConsulta = new SqlCommand(consulta, conexion);

            SqlDataReader reader = cmdConsulta.ExecuteReader(); // ejecuta la consulta

            LinkedList<Categoria> categorias = new LinkedList<Categoria>(); // crea la lista

            while (reader.Read()) { // itera las categorias y las guarda en la lista 
                
                Categoria categoria = new Categoria();
                categoria.IdCategoria = reader.GetInt32(0);
                categoria.NombreCategoria = reader.GetString(1);
                categoria.ImagenCategoria = reader.GetString(2);

                categorias.AddLast(categoria);
            }

            return categorias; // retorna las categorias

        }

        public void guardarCategoria(String nombreCategoria, String RutaImagen)  // Metodo que guarda una categoria
        {
            String consulta = "insert into Categoria values ('"+nombreCategoria + "','" +RutaImagen+"')"; // insert en la base de datos

            SqlConnection conexion = new SqlConnection(literalConexion);
            SqlCommand cmdInsertarCategoria = new SqlCommand(consulta, conexion);

            conexion.Open();

            try{
            cmdInsertarCategoria.ExecuteReader(); // ejecuta la consulta y por ende realiza el insert 
            }
            catch (Exception) { }
            conexion.Close(); 
        }

        public Categoria GetCategoria(int idCategoria)  // metodo que obtiene una categoria segun el id indicado
        {
            String consulta = "select * from Categoria where id_categoria = " + idCategoria;

            SqlConnection conexion = new SqlConnection(literalConexion);
            
            SqlCommand cmdSelectCategoria = new SqlCommand(consulta, conexion);

            conexion.Open();

            SqlDataReader reader = cmdSelectCategoria.ExecuteReader();

            Categoria categoria = new Categoria();

            if (reader.Read()) 
            {
                categoria.IdCategoria = reader.GetInt32(0);
                categoria.NombreCategoria = reader.GetString(1);
                categoria.ImagenCategoria = reader.GetString(2);
            }

            return categoria;

        }

        public String NombreCategoria(int idCategoria) // metodo que obtiene el nombre de la categoria segun el id indicado
        {
            String consulta = "Select nombre_categoria from Categoria where id_categoria = " + idCategoria;

            SqlConnection conexion = new SqlConnection(literalConexion);
            SqlCommand cmdNombreCategoria = new SqlCommand(consulta, conexion);

            conexion.Open();

            SqlDataReader reader = cmdNombreCategoria.ExecuteReader();

            String nombreCategoria = "";

            if (reader.Read())
            {
                nombreCategoria = reader.GetString(0);
            }

            return nombreCategoria;
        }
    }
}
